function toggleVisibility(linkObj)
{
    var base = $(linkObj).attr('id');
    var summary = $('#' + base + '-summary');
    var content = $('#' + base + '-content');
    var trigger = $('#' + base + '-trigger');
    var src = $(trigger).attr('src');
    if (content.is(':visible') === true)
    {
        content.hide();
        summary.show();
        $(linkObj).addClass('closed').removeClass('opened');
        $(trigger).attr('src', src.substring(0, src.length - 8) + 'closed.png');
    }
    else
    {
        content.show();
        summary.hide();
        $(linkObj).removeClass('closed').addClass('opened');
        $(trigger).attr('src', src.substring(0, src.length - 10) + 'open.png');
    }
    return false;
}

function updateStripes()
{
    $('table.directory tr').
    removeClass('even').filter(':visible:even').addClass('even');
}

function toggleLevel(level)
{
    $('table.directory tr').each(function ()
    {
        var l = this.id.split('_').length - 1;
        var i = $('#img' + this.id.substring(3));
        var a = $('#arr' + this.id.substring(3));
        if (l < level + 1)
        {
            i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
            a.html('&#9660;');
            $(this).show();
        }
        else if (l == level + 1)
        {
            i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
            a.html('&#9658;');
            $(this).show();
        }
        else
        {
            $(this).hide();
        }
    }
    );
    updateStripes();
}

function toggleFolder(id)
{
    // the clicked row
    var currentRow = $('#row_' + id);

    // all rows after the clicked row
    var rows = currentRow.nextAll("tr");

    var re = new RegExp('^row_' + id + '\\d+_$', "i"); //only one sub

    // only match elements AFTER this one (can't hide elements before)
    var childRows = rows.filter(function ()
        {
            return this.id.match(re);
        }
        );

    // first row is visible we are HIDING
    if (childRows.filter(':first').is(':visible') === true)
    {
        // replace down arrow by right arrow for current row
        var currentRowSpans = currentRow.find("span");
        currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
        currentRowSpans.filter(".arrow").html('&#9658;');
        rows.filter("[id^=row_" + id + "]").hide(); // hide all children
    }
    else
    { // we are SHOWING
        // replace right arrow by down arrow for current row
        var currentRowSpans = currentRow.find("span");
        currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
        currentRowSpans.filter(".arrow").html('&#9660;');
        // replace down arrows by right arrows for child rows
        var childRowsSpans = childRows.find("span");
        childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
        childRowsSpans.filter(".arrow").html('&#9658;');
        childRows.show(); //show all children
    }
    updateStripes();
}

function toggleInherit(id)
{
    var rows = $('tr.inherit.' + id);
    var img = $('tr.inherit_header.' + id + ' img');
    var src = $(img).attr('src');
    if (rows.filter(':first').is(':visible') === true)
    {
        rows.css('display', 'none');
        $(img).attr('src', src.substring(0, src.length - 8) + 'closed.png');
    }
    else
    {
        rows.css('display', 'table-row'); // using show() causes jump in firefox
        $(img).attr('src', src.substring(0, src.length - 10) + 'open.png');
    }
}

$(document).ready(function ()
{
    $('.code,.codeRef').each(function ()
    {
        $(this).data('powertip', $('#' + $(this).attr('href').replace(/.*\//, '').replace(/[^a-z_A-Z0-9]/g, '_')).html());
        $(this).powerTip(
        {
            placement: 's',
            smartPlacement: true,
            mouseOnToPopup: true
        }
        );
    }
    );
}
);
